"""
装饰器工具
"""

from functools import wraps
from flask import request, jsonify, current_app


def require_api_key(f):
    """
    API Key 验证装饰器（可选）
    如果设置了 INTERNAL_API_KEY，则验证请求头中的 Authorization
    """
    @wraps(f)
    def decorated_function(*args, **kwargs):
        internal_api_key = current_app.config.get('INTERNAL_API_KEY', '')
        
        # 如果没有设置内部 API Key，则不验证
        if not internal_api_key:
            return f(*args, **kwargs)
        
        # 验证 Authorization 头
        auth_header = request.headers.get('Authorization', '')
        
        if not auth_header.startswith('Bearer '):
            return jsonify({'error': '缺少 Authorization 头'}), 401
        
        token = auth_header[7:]  # 去掉 "Bearer " 前缀
        
        if token != internal_api_key:
            return jsonify({'error': '未授权访问'}), 401
        
        return f(*args, **kwargs)
    
    return decorated_function

